iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0

在 JavaScipt 中可以使用 Class 語法糖來建立物件,
但要注意 JavaScript 的 Class 與其他語言的 Class 不同,
在其他語言像是 C# 、 C++ 、 Java 中的 Class 僅是定義物件的模板而不是物件,
然而 JavaScript 中的 Class 就是物件,
可以像是在呼叫建構子前透過 new 運算子來建立物件,

來看個透過 Class 建立物件的範例:


class Person {
  constructor(firstname, lastname) {
    this.firstname = firstname;
    this.lastname = lastname;
  }

  greet() {
    return "Hi " + this.firstname;
  }
}

var jimmy = new Person("Jimmy", "Huang");

console.log(jimmy);

在開發者工具 console 中的結果:

在 Class 中的 constructor 裡可以像之前在建構子裡建立預設屬性一樣,
透過 this 來參考到物件本身,再透過 . 運算子來添加屬性,

Class 中的 greet 則是物件的方法,

將透過 Class 建立的物件設置連結原型物件

可以透過 extends 關鍵字來設置透過 class 建立的物件在原型鏈中要連結的原型物件:

class Person {
  constructor(firstname, lastname) {
    this.firstname = firstname;
    this.lastname = lastname;
  }

  greet() {
    return "Hi " + this.firstname + " " + this.lastname;
  }
}

class informalPerson extends Person {
  constructor(firstname, lastname) {
    super(firstname, lastname);
  }

}

var cloneJimmy = new informalPerson("Jimmy", "Clone");
console.log(cloneJimmy);
console.log(cloneJimmy.greet());

Class constructor 中的 super 方法會呼叫 extends 後方 Class 中的 constructor 來參考到原型物件的屬性,

當透過 class 新建立的 informalPerson 物件(cloneJimmy)執行 greet 方法時,
在自己的物件中找不到,
因為有透過 extends 來把 Person 當作原型物件連結到 informalPerson 物件上,
所以 informalPerson 物件可以在原型鏈下找到原型物件的 greet 方法來使用.

在開發者工具 console 中的結果:

Class 是 JavaScript ES6 規範中提出的一種語法糖,能讓從 C#、C++、Java 來的程式設計師容易上手,
但需要注意不能把在其他語言中對 Class 的了解直接套用在 JavaScript 的 Class 上,
因為 JavaScript 中的 Class 已經是物件了.
而且是基於原型繼承的.


上一篇
Object.create 與純粹的原型繼承
下一篇
非同步事件
系列文
那些必須了解的 JavaScript 特性與寫程式前的思考17
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言